package cn.edu.ustc.xrovers.daoImpl;

import java.sql.SQLException;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;

import cn.edu.ustc.xrovers.dao.PaginationDao;

/**
 * 分页查询Dao实现类
 * @author paddy
 *
 */
public class PaginationDaoImpl extends BaseDao implements PaginationDao {

	/**
	* 分页查询
	* @param hql 查询的条件
	* @param offset 开始记录
	* @param length 一次查询的记录条数
	* @return 查询结果集
	*/
	@SuppressWarnings("unchecked")
	public List<Object> queryForPage(final String hql,final int offset,final int length){
		List<Object> list = ht.executeFind(new HibernateCallback(){
			public Object doInHibernate(Session session) throws HibernateException,SQLException{
				Query query = session.createQuery(hql);
				query.setFirstResult(offset);
				query.setMaxResults(length);
				List<Object> list = query.list();
				return list;
			}
		}
		);
		return list;
	}

	/**
	 * 返回记录总数
	 */
	public int getAllRowCount(String hql){
		return ht.find(hql).size();
	}

}
